/*
题目：仅出现一次的数字Ⅲ
给定一个整数数组 nums，其中恰好有两个元素只出现一次，其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

进阶：你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现？
 */
public class SingleNumber {
    public int[] singleNumber(int[] nums) {
        int xor = 0;
        for(int ele: nums){
            xor ^= ele;
        }
        int[] ans = new int[2];

        int lowBit = (xor == Integer.MIN_VALUE)? xor: xor & (-xor);
        for(int ele: nums){
            if((lowBit & ele) != 0){
                ans[1] ^= ele;
            }
        }
        ans[0] = xor ^ ans[1];
        return ans;
    }
}
